# from django.utils.deprecation import MiddlewareMixin
# from django.shortcuts import HttpResponse
#
#
# class MyMiddleware1(MiddlewareMixin):
#     def process_request(self, request):
#         print('我是第一个自定义中间件里面的process_request方法')
#         # return HttpResponse('我是第一个自定义中间件里面的process_request返回的方法')
#
#     def process_response(self, request, response):
#         '''
#
#         :param request:
#         :param response: 就是django后端返回给浏览器的内容
#         :return:
#         '''
#         print('我是第一个自定义中间件里面的process_response方法')
#         return HttpResponse('Hello World!')
#
#     def process_view(self, request, view_name, *args, **kwargs):
#         print(view_name, args, kwargs)
#         print('我是第一个自定义中间件里面的process_view方法')
#
#     def process_template_response(self, request, response):
#         print('我是第一个自定义中间件里面的process_template_response方法')
#         return response
#
#     def process_exception(self, request, exception):
#         print('我是第一个自定义中间件里面的process_exception方法')
#         print(exception)
#
#
# class MyMiddleware2(MiddlewareMixin):
#     def process_request(self, request):
#         print('我是第二个自定义中间件里面的process_request方法')
#
#     def process_response(self, request, response):
#         print('我是第二个自定义中间件里面的process_response方法')
#         # 'NoneType' object has no attribute 'get'
#         return response
#
#     def process_view(self, request, view_name, *args, **kwargs):
#         print(view_name, args, kwargs)
#         print('我是第二个自定义中间件里面的process_view方法')
#
#     def process_template_response(self, request, response):
#         print('我是第二个自定义中间件里面的process_template_response方法')
#         return response
#
#     def process_exception(self, request, exception):
#         print('我是第二个自定义中间件里面的process_exception方法')
#         print(exception)
#
#
# '''
# 1.必须掌握
#     process_request
#         1.1请求来的时候需要经过每一个中间件里面的process_request方法
#         经过的顺序是按照配置文件注册的中间件从上往下的顺序依次执行
#         1.2如果中间件里面没有定义该方法 那么直接跳过执行下一个中间件
#         1.3如果该方法返回了HttpResponse对象 那么请求将不再继续往后执行
#             而是直接原路返回(类似校验失败不允许方法)
#
#         process_request 方法就是用来做全局相关的所有限制功能
#             1.1响应走的时候需要经过每一个中间件里面的process_response方法,
#             该方法有两个额外的参数request,response
#                 经过的顺序是按照配置文件注册的中间件从下往上的顺序依次执行
#             1.2该方法必须返回一个HttpResponse对象
#                 1.2.1 默认返回的就是形参response
#                 1.2.2 你也可以返回自己的
#                 如果中间件里面没有定义该方法 那么直接跳过执行上一个中间件
#
#     process_reponse
#
#
# 2.了解即可
#     process_view
#         1.在路由匹配成功之后 执行视图函数之前 会自动执行中间件里面的该方法
#         顺序是按照配置文件注册的中间件从上往下的顺序依次执行
#
#     process_template_response
#         1.返回的HttpResponse对象有render属性的时候才会触发
#           顺序是按照配置文件注册的中间件从下往上的顺序依次执行
#
#     process_exception
#         1.当视图函数中出现异常的情况下触发
#           顺序是按照配置文件注册的中间件从下往上的顺序依次执行
# '''
#
